﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Cotizav.AccesoDatos
{
    public class ContactoDAO
    {
        public List<Entidades.Contacto> Listar(Util.ContextoDB ctx)
        {
            SqlCommand cmd = new SqlCommand("select * from CONTACTO", ctx.GetConexion(), ctx.GetTx());
            DataTable dtContacto = new DataTable();
            dtContacto.Load(cmd.ExecuteReader());

            List<Entidades.Contacto> lista = new List<Entidades.Contacto>();

            foreach (DataRow fila in dtContacto.Rows)
            {
                Entidades.Contacto c = new Entidades.Contacto();

                c.IdContacto = Int32.Parse(fila["ID"].ToString());
                c.Nombre = fila["NOMBRE"].ToString();
                c.Cargo = fila["CARGO"].ToString();
                c.Email = fila["EMAIL"].ToString();
                c.Telefono = fila["TELEFONO"].ToString();
                c.Fax = fila["FAX"].ToString();
                c.Celular = fila["CELULAR"].ToString();
                c.Nextel = fila["NEXTEL"].ToString();
                c.Rpc = fila["RPC"].ToString();
                c.Rpm = fila["RPM"].ToString();
                c.IdCliente = !(fila["IDCLIENTE"] is DBNull) ? Int32.Parse(fila["IDCLIENTE"].ToString()) : new Nullable<int>();
                c.Activo = Int32.Parse(fila["ACTIVO"].ToString());

                lista.Add(c);
            }

            return lista;
        }

        public List<Entidades.Contacto> Listar(Util.ContextoDB ctx, Entidades.Cliente selCliente)
        {
            SqlCommand cmd = new SqlCommand(string.Format("select * from CONTACTO where idCliente = {0}",selCliente.IdCliente), ctx.GetConexion(), ctx.GetTx());
            DataTable dtContacto = new DataTable();
            dtContacto.Load(cmd.ExecuteReader());

            List<Entidades.Contacto> lista = new List<Entidades.Contacto>();

            foreach (DataRow fila in dtContacto.Rows)
            {
                Entidades.Contacto c = new Entidades.Contacto();

                c.IdContacto = Int32.Parse(fila["ID"].ToString());
                c.Nombre = fila["NOMBRE"].ToString();
                c.Cargo = fila["CARGO"].ToString();
                c.Email = fila["EMAIL"].ToString();
                c.Telefono = fila["TELEFONO"].ToString();
                c.Fax = fila["FAX"].ToString();
                c.Celular = fila["CELULAR"].ToString();
                c.Nextel = fila["NEXTEL"].ToString();
                c.Rpc = fila["RPC"].ToString();
                c.Rpm = fila["RPM"].ToString();
                c.IdCliente = !(fila["IDCLIENTE"] is DBNull) ? Int32.Parse(fila["IDCLIENTE"].ToString()) : new Nullable<int>();
                c.Activo = Int32.Parse(fila["ACTIVO"].ToString());

                lista.Add(c);
            }

            return lista;
        }

        public int Registrar(Util.ContextoDB ctx, Entidades.Cliente nuevoCliente, Entidades.Contacto nuevoContacto)
        {
            SqlCommand cmd = new SqlCommand("USP_CONTACTO_INSERT", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", 0).Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.AddWithValue("@IDCLIENTE", nuevoCliente.IdCliente);
            cmd.Parameters.AddWithValue("@NOMBRE", nuevoContacto.Nombre ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@CARGO", nuevoContacto.Cargo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@EMAIL", nuevoContacto.Email ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TELEFONO", nuevoContacto.Telefono ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@FAX", nuevoContacto.Fax ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@CELULAR", nuevoContacto.Celular ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@NEXTEL", nuevoContacto.Nextel ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@RPC", nuevoContacto.Rpc ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@RPM", nuevoContacto.Rpm ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ACTIVO", nuevoContacto.Activo);

            int result = cmd.ExecuteNonQuery();

            int id = Int32.Parse(cmd.Parameters["@ID"].Value.ToString());
            nuevoContacto.IdContacto = id;

            return result;
        }

        public int Actualizar(Util.ContextoDB ctx, Entidades.Contacto updContacto)
        {
            SqlCommand cmd = new SqlCommand("USP_CONTACTO_UPDATE", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", updContacto.IdContacto);
            cmd.Parameters.AddWithValue("@NOMBRE", updContacto.Nombre ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@CARGO", updContacto.Cargo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@EMAIL", updContacto.Email ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TELEFONO", updContacto.Telefono ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@FAX", updContacto.Fax ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@CELULAR", updContacto.Celular ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@NEXTEL", updContacto.Nextel ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@RPC", updContacto.Rpc ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@RPM", updContacto.Rpm ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();

            return result;
        }

        public int Eliminar(Util.ContextoDB ctx, Entidades.Contacto delContacto)
        {
            SqlCommand cmd = new SqlCommand("USP_CONTACTO_DELETE", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", delContacto.IdContacto);
            int result = cmd.ExecuteNonQuery();

            return result;
        }
    }
}
